#ifndef __MATRIX3X3_H__
#define __MATRIX3X3_H__
#include "vector.h"
#include <string>

class Matrix3x3{
    private:
        float m[3][3];
        static const float identity[9];
        static const int MATRIX_SIZE =  3;

    public:
    	// Construye la matriz especificamente como una de rotacion
    	Matrix3x3(float theta);
    	// Construye la matriz especificamente como una de translacion
    	Matrix3x3(float dx,float dy);
    	// Construye la matriz especificamente como una de escalado
    	// (el ultimo parametro es para distinguirlo de la translacion nada mas)
    	Matrix3x3(float ex,float ey,bool);
    	// Construye la matriz de window-viewport
    	Matrix3x3(float ax,float ay,float bx,float by);

        Matrix3x3();
        ~Matrix3x3();

        void set(unsigned short x,unsigned short y, float val);
        inline float get(unsigned short x,unsigned short y);

        void loadIdentity();
		void operator*=(Matrix3x3& matrix);
        Vector operator*(const Vector& vector)const;

        std::string toString();

};

#endif // __MATRIX3X3_H__
